package TDAList;

import java.util.*;
import java.util.NoSuchElementException;

/**
 * Objeto que implementa la interface Iterator para iterar sobre una determinada lista.
 * 
 * @author Arro Gonzalo
 *
 * @param <E> tipo genérico para los elementos del iterador.
 */

public class ElementIterator<E> implements Iterator<E>{
	
	// Atributos de instancia

	private PositionList <E> list;
	private Position<E> cursor;
	
	// Constructor
	
	public ElementIterator (PositionList <E> l ) {
		list = l;
		try {
	    	if (list.isEmpty()) 
		    	cursor = null;
	    	else
		    	cursor = list.first();
		}
		catch(EmptyListException ex) {}
	}
	
	// Métodos
	
	public boolean hasNext() {
		return cursor != null; 
	}


	public E next () throws NoSuchElementException {
		if ( cursor == null ) 
			throw new NoSuchElementException ("La lista no posee siguiente elemento");
		E toReturn = cursor.element();
		try{
			cursor = (cursor == list.last()) ? null : list.next(cursor);
		}
		catch(EmptyListException | InvalidPositionException | BoundaryViolationException ex) {}
		return toReturn;
	}
	
	// Método no implementado
	
	public void remove() {  }

}	


